﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using bolsatrabajo.Negocio;
using bolsatrabajo.Dominio.NHIBERNATE;
using System.Web.SessionState;

namespace bolsatrabajo.Controllers
{


    public class PostulacionController : Controller
    {
        ServAviso ServAviso { get; set; }
        ServPostular ServPostular{ get; set; }
        ServPostulante ServPostulante { get; set; }
        
        public ActionResult Index(String Correo)
        {
            Correo = Session["logincorreopostulante"].ToString();
            ICollection<Aviso> Model = ServAviso.TodosLosAvisos();
            return View(Model);
        }

        public ActionResult VerPostulaciones()
        {
            String CorreoP = Session["logincorreopostulante"].ToString();
            ICollection<Postulacion> Model = ServPostular.PostulacionesxPostulante(CorreoP);
            return View(Model);
        }

        public ActionResult ListaAvisos()
        {
            ICollection<Aviso> Model = ServAviso.TodosLosAvisos();
            return View(Model);
        }
        public ActionResult Create()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Create(Int32 IdAviso, String Correo, FormCollection collection)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    Correo = Session["logincorreopostulante"].ToString();

                    Postulante postulante = ServPostulante.ObtenerPostulante(Correo);

                    if (postulante == null)
                        throw new Exception("Postulante no registrado");
                    Aviso aviso = ServAviso.ConsultarAviso(IdAviso);
                    if (aviso == null)
                        throw new Exception("Aviso no existe");
                    Postulacion postulacionACrear = new Postulacion();
                    postulacionACrear.Postulante = postulante;
                    postulacionACrear.Aviso = aviso;
                    postulacionACrear.FechaRegistro = DateTime.Parse((String)collection["FechaRegistro"]);
                    postulacionACrear.DescripcionPostulante = (String)collection["FechaRegistro"];
                    ServPostular.Postular(Correo,postulacionACrear);
                    return RedirectToAction("Index");
                }
                return View();
            }
            catch (Exception e)
            {
                ModelState.AddModelError(String.Empty, "Error interno al intentar crear el postulante");
                return View();
            }
        }

        public ActionResult Edit(Int32 idpostulacion)
        {
            Postulacion Model = ServPostular.ConsultarPostulacion(idpostulacion);
            return View(Model);
        }

        [HttpPost]
        public ActionResult Edit(Int32 idpostulacion, FormCollection collection)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    if (idpostulacion == 0)
                        throw new Exception("Id de Postulacion no valida");
                    Postulacion postulacionbuscada = ServPostular.ConsultarPostulacion(idpostulacion);
                    if (postulacionbuscada == null)
                        throw new Exception("Postulacion no encontrada");
                    Postulacion postulacionAModificar = new Postulacion();
                    postulacionAModificar.Id_Postulacion = idpostulacion;
                    postulacionAModificar.Postulante = postulacionbuscada.Postulante;
                    postulacionAModificar.Aviso = postulacionbuscada.Aviso;
                    postulacionAModificar.FechaRegistro = postulacionbuscada.FechaRegistro;
                    postulacionAModificar.DescripcionPostulante = (String)collection["DescripcionPostulante"];
                    ServPostular.ModificarPostulacion(postulacionAModificar);
                    return RedirectToAction("Index");
                }
                return View();
            }
            catch
            {
                return View();
            }
        }

        public ActionResult Delete(Int32 idpostulacion)
        {
            Postulacion Model = ServPostular.ConsultarPostulacion(idpostulacion);
            return View(Model);
        }

        //
        // POST: /Tutor/Delete/pcsihsai
        [HttpPost]
        public ActionResult Delete(Int32 idpostulacion, FormCollection collection)
        {
            try
            {
                if (idpostulacion == 0)
                    throw new Exception("Id de Aviso no valido");
                Aviso avisoAEliminar = ServAviso.ConsultarAviso(idpostulacion);
                if (avisoAEliminar == null)
                    throw new Exception("Aviso no encontrado");

                ServAviso.EliminarAviso(avisoAEliminar);
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }


    }
}
